package com.itheima.dongtai;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class ProxyUtil {
    /*

    创建动态代理的对象
    1.获取代理的对象

    2.再调用代理的动态方法
     */

    public static Star createProxy(BigStar bigStar){
        //参数一：用于指定哪个类加载器，去加载生成的代理类
        //参数二：指定接口，这些接口用于指定生成的代理类长什么，也就是有哪些方法
        //参数三：用来指定生成的代理对象要干什么事情
        Star star = (Star)Proxy.newProxyInstance(
                ProxyUtil.class.getClassLoader(),
                new Class[]{Star.class},
                new InvocationHandler() {
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        /*
                        参数一：代理的对象
                        参数二：要运行的方法sing
                        参数三：运行方法时要传递的参数
                        */
                        if("sing".equals(method.getName())){
                            System.out.println("准备话筒收钱");
                        }else if("dance".equals(method.getName())){
                            System.out.println("准备场地收钱");
                        }
                        //去找大明星开始唱歌或者跳舞
                        //代码的表现形式
                        return method.invoke(bigStar,args);
                    }
                }
        );
        return star;
    }
}
